//
//  YMLogViewController.swift
//  swift_review
//
//  Created by Andrew on 2024/12/21.
//

import UIKit

class YMLogViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        view.backgroundColor = .white
        // 添加一个按钮触发崩溃
        let crashButton = UIButton(type: .system)
        crashButton.setTitle("Crash App", for: .normal)
        crashButton.addTarget(self, action: #selector(crashApp), for: .touchUpInside)
        crashButton.center = view.center
        crashButton.frame = CGRect(x: 100, y: 100, width: 200, height: 50)
        view.addSubview(crashButton)
    }
    
    @objc func crashApp() {
        //测试swift
        let value: String? = nil
        print(value!) // 解包失败触发 `fatalError`
        
//        fatalError("This is a test fatalError")
        
        //测试oc
//        这是因为 fatalError 和 NSException 属于两种不同的崩溃机制，处理方式不同：
//        NSException 是 Objective-C 的异常机制，它可以通过 NSSetUncaughtExceptionHandler 捕获。
//        fatalError 是 Swift 的一种断言，触发后直接调用系统的 abort() 函数，导致程序退出，这种情况无法通过 NSSetUncaughtExceptionHandler 捕获。
//        对于 Swift 的 fatalError 或强制解包（value! 导致的崩溃），这些崩溃是通过信号（如 SIGABRT 或 SIGILL）来表示的，而不是 NSException。
//        NSException(name: .invalidArgumentException, reason: "Test Exception", userInfo: nil).raise()
    }
    
}
